#include<bits/stdc++.h>
#define ll long long
using namespace std;
int schl[100001];
int stu = 0;
ll sum = 0;// 存值
int valleft = INT_MAX;
int valright = INT_MAX;

int m, n;

int main()
{
	cin >> m  >> n;

	for (int i = 0; i < m; i++) {
		cin >> schl[i];
	}
//	for (int i = 0; i < n; i++) {
//		cin >> stu[i];
//	}
	sort(schl, schl + m);
//	sort(stu, stu + n);
	int right = 0;
	int left = 0;
	while (n --) {
		cin >> stu;
		// 可用二分代替
//		template <class ForwardIterator, class T>
//		ForwardIterator lower_bound (ForwardIterator first, ForwardIterator last, const T& val);
		right = lower_bound(schl, schl + m, stu) - schl;
		left = right - 1;
		valleft = INT_MAX;
		valright = INT_MAX;
		if (right != m) {
			valright = schl[right] - stu;
		}
		if ( left != -1) {// 左边有数字
			valleft = stu - schl[left];
		}
		sum += min(valleft, valright);
	}

//  WA 可能没开 longlong
//	双指针 RE
//	int ptrschl = 0;
//	int ptrstu = 0;
//	int pre = INT_MAX;
//
//	while ( ptrstu < n) {
//		int cur = abs(schl[ptrschl] - stu[ptrstu]);
//		if (cur <= pre ) {
//			pre = cur;
//			ptrschl ++;
//			sum += pre;
//		} else {
//			ptrstu ++;
//			pre = INT_MAX;
//		}
//
//	}
//		int dp[m]={0};
//		for (int j = 0; j < n; j++) {
//
//			dp[0] = abs(stu[j] - schl[0]);
//			int mindg = dp[0];
//			for (int i = 1; i < m; i++) {
//				dp[i] = abs(stu[j] - schl[i]);
//				if (dp[i] < dp[i - 1]) {
//					mindg = dp[i];
//				} else {
//					break;
//				}
//
//			}
//			minSum += mindg;
//			mindg = 0;
//			memset(dp, 0, sizeof(dp));
//		}
	cout << sum << endl;
//	delete[] schl;
//	delete[] stu;

	return 0;
}
